package com.itheima.before_leyou_store.demo;


import com.alibaba.fastjson.JSON;

import com.itheima.before_leyou_store.pojo.User;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class Demo {
    private static final String INDEX_TEMPLATE = "{\n" +
            "  \"mappings\": {\n" +
            "    \"properties\": {\n" +
            "      \"id\":{\n" +
            "        \"type\": \"long\"\n" +
            "      },\n" +
            "      \"name\":{\n" +
            "        \"type\": \"text\"\n" +
            "        , \"analyzer\": \"ik_max_word\"\n" +
            "      }\n" +
            "    }\n" +
            "  }\n" +
            "}";

    private RestHighLevelClient client;

    @Test
    public void testCreateIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("user");
        request.source(INDEX_TEMPLATE, XContentType.JSON);
        CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println("isAcknowledged: " + response.isAcknowledged());
    }

    @Test
    public void getIndex() throws IOException {
        GetIndexRequest request =new GetIndexRequest("user");
        GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
        System.out.println(response);
    }
    @Test
    public void deleteIndex() throws IOException {
        DeleteIndexRequest request =new DeleteIndexRequest("user");
        AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println("response = " + response);
    }
    @Test
    public void addDocument() throws IOException {
        User user =new User(1L,"张三",23,"男","在黑马学习Java");
        IndexRequest request =new IndexRequest("user");
        request.id(user.getId().toString());
        String jsonUser = JSON.toJSONString(user);
        request.source(jsonUser,XContentType.JSON);

        IndexResponse response = client.index(request,RequestOptions.DEFAULT);
        System.out.println(response);

    }
    @Test
    public void getDocument() throws IOException {
        GetRequest request =new GetRequest("user","1");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        System.out.println(response);
    }
    @Test
    public void deleteDocument() throws IOException {
        DeleteRequest request = new DeleteRequest("user","1");

        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(response);
    }
    @Test
    public void bulkAddDocumentList() throws IOException {
        List<User> users = Arrays.asList(
                new User(1L, "Rose", 18, "1", "Rose同学在传智播客学表演"),
                new User(2L, "Jack", 38, "1", "Jack同学在黑马学JavaEE"),
                new User(3L, "小红", 23, "0", "小红同学在传智播客学唱歌"),
                new User(4L, "小明", 20, "1", "小明同学在黑马学JavaSE"),
                new User(5L, "达摩", 33, "1", "达摩和尚在达摩院学唱歌"),
                new User(6L, "鲁班", 24, "1", "鲁班同学走在乡间小路上"),
                new User(7L, "孙尚香", 26, "0", "孙尚香同学想带阿斗回东吴"),
                new User(8L, "李白", 27, "1", "李白同学在山顶喝着酒唱着歌"),
                new User(9L, "甄姬", 28, "0", "甄姬同学弹奏一曲东风破"),
                new User(10L, "虞姬", 27, "0", "虞姬同学在和项羽谈情说爱")
        );
        BulkRequest request =new BulkRequest();
        for (User user : users) {
            request.add(new IndexRequest("user").id(user.getId().toString()).source(JSON.toJSONString(user),XContentType.JSON));
        }
        BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
        System.out.println(responses);
    }



    @Before
    public void createRestHighLevelClient(){
        client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.187.128", 9200, "http")));

    }


    @After
    public void closeRestHighLevelClient() throws Exception {
        client.close();
    }
}
